<?php
/*
 INSERTIMAGE.PHP by martin $ 2008/04/16 02:17:44
*/

include_once('owner/ini.inc.php');
include_once('utils.php');
include_once('utils_admin.php');
include_once('session.class.php');
define('ADMIN', Auth() ? TRUE : FALSE);

checkADMIN(TRUE);

if($mb){
 mb_language('Japanese');
 mb_internal_encoding(ENCODE);
}

 $ip = getenv('REMOTE_ADDR') ? getenv('REMOTE_ADDR') : $_SERVER['REMOTE_ADDR'];
 $_ip = implode('', array_slice($sip=explode('.', $ip), 0, 2));
 $key1 = urldecode(my_decrypt(g_('KY')));

if(ADMIN  != TRUE){ // For rescue
 if($key1 != md5($_ip.OPASS)) _header('admin.php');
}

if(GD != TRUE) die('This script needs GD library. Please check the GD on your server.');

$images_cache_unlinked = $images_cache = array();

if(is_file($db=DB.'images.db')) $images_cache = file($db);
if(is_file(DB.'images_unlinked.db')) $images_cache_unlinked = file(DB.'images_unlinked.db');

$UID = g_('UID');

$img_file = $fs = $w = $h = $th = $tw = $ratio = "";

$mimeTypes = array(
 'amc' => 'application/x-mpeg',
 'asf' => 'video/x-ms-asf',
 'avi' => 'video/x-msvideo',
 '3gp' => 'audio/3gpp',
 '3gpp' => 'audio/3gpp',
 'mp4' => 'video/mp4',
 'mpg' => 'video/mpeg',
 'mpeg' => 'video/mpeg',
 'wma' => 'audio/x-ms-wma',
 'wmv' => 'video/x-ms-wmv',
 'mp3' => 'audio/mpeg',
);

if(g_('TID')!='' && $UID!=''){
 foreach($images_cache_unlinked as $i=>$info){
  $split = explode("|", $info); 
  $len = sizeof($split);// IMG: 8, 12, MEDIA: 7
  if($len > 7){ // IMG
   $id = $split[0]; $mdate = $split[1]; $name = $split[2];
   $w = $split[3]; $h = $split[4]; $fs = $split[5];
   if($len==12){
    $tw = $split[8];
    $th = $split[9];
   }
   $dir = IMG_DIR;
  } else { // MEDIA
   $id = $split[0]; $mdate = $split[1]; $name = $split[2]; $fext = explode('.', $name);
   $fext = array_pop($fext); $fs = $split[3];
   $dir = MEDIA_DIR; 
  }
  $tar_file = $id.'_'.$name;
  if(g_('TID')==$id){
   $selected = $info;
   break;
  }
 } #foreach
 if(isset($selected)){
  foreach($images_cache as $j=>$_info){
   if($info==$_info) break;
  }
  array_splice($images_cache, $j, 1); // delete!!
  if($len > 7){
   $img_file = $UID.'_'.$name;
   if(is_file($dir.$tar_file)){
    if(is_file($dir.$img_file)) unlink($dir.$img_file);
    rename($dir.$tar_file, $dir.$img_file);
    if(is_file(IMG_DIR.THUMB1.$tar_file)) rename(IMG_DIR.THUMB1.$tar_file, IMG_DIR.THUMB1.$img_file);
    if(is_file(IMG_DIR.THUMB2.$tar_file)) rename(IMG_DIR.THUMB2.$tar_file, IMG_DIR.THUMB2.$img_file);
   }
   $ratio = MAX_ISIZE / max($w, $h);
   if( $ratio < 1 ){
    $tw = round($ratio * $w);
    $th = round($ratio * $h);
   }
   if(max($w, $h) > 280){
    $r2 = 280/max($w, $h);
    $disp_w = round($w * $r2);
    $disp_h = round($h * $r2);
   } else {
    $disp_w = $w; $disp_h = $h;
   }
   $output = '<img src="'.$dir.$img_file.'" width="'.$disp_w.'" height="'.$disp_h.'" class="photo" alt="*" title="ファイルサイズ：'.$fs.'KB" />';
  } else { // MEDIA
   $media_file = $id.'_'.$UID.'_'.$name;
   if(is_file($dir.$tar_file)){
    if(is_file($dir.$media_file)) unlink($dir.$media_file);
    rename($dir.$tar_file, $dir.$media_file);
   }
   foreach($mimeTypes as $ext=>$mime){
    if(strtolower($fext)==$ext){
     $output = NL.'[media:'.basename($media_file).':'.$fs.':'.$mime.'/]';
     break;
    } else $output = NL.'[media:'.basename($media_file).':'.$fs.':/]';
   } #foreach
  } # MEDIA
  array_unshift($images_cache, str_replace(substr($selected, 0, 10), $UID, $selected));
  rewrite($db, $images_cache);
  update_images_cache($images_cache);
 } # selected
}

?>
<!DOCTYPE html>
<html>
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=<?php echo ENCODE;?>" /> 
<meta http-equiv="Content-Script-Type" content="text/javascript" /> 
<meta http-equiv="Content-Style-Type" content="text/css" /> 
<title>InsertImageManager</title>
<style type="text/css">
html, body {
  font: 500 10pt trebuchet ms;
  background:url(Images/bg.png) #efe;
  width: 520px;
}
#wrapper {
  width: 520px;
  height: auto;
  margin:auto;
  text-align: center;
}
fieldset {
  width: 90%;
  text-align :left;
  margin-bottom: 10px;
}
legend {
  \margin-top: 1em;
}
input {
  font: 500 9pt arial;
  height: auto;
}
#ThumbView {
  width: 505px;
  overflow-x: auto;
  overflow-y: hidden;
  height: 180px;
  min-height: 180px;
  border: 2px solid #ddd;
}
img.photo {
  margin: 7px;
  padding: 7px;
  background-color: #fff;
  border: 1px solid #ccc;
  border-color: #ddd #999 #999 #ccc;
  margin-top: 1.5em;
}
ul.p2em{
  margin: 1em auto;
  padding-left: 2em;
  list-style: square;
  width: 30em;
  text-align: left;
}
.close {
  position: absolute;
  top: 0; right: 0;
  width: 75px; height: 16px;
  cursor: pointer;
  background: url(Images/button-close.png) no-repeat;
}
.return {
  position: absolute;
  top: 1px; left: 3px;
  width: 75px; height: 16px;
  cursor: pointer;
  font: 600 15px Tahoma,Arial;
  background: url(Images/return.png) no-repeat;
}
</style>
<script type="text/javascript">/*<![CDATA[*/
var d = document;
var ie = d.selection ? 1 : 0;
var isSelected = <?php echo isset($selected)?1:0;?>;

_FILE = 'src="<?php echo IMG_DIR.$img_file?>"';
_SIZEINFO = '<?php echo $fs.':'.$w.':'.$h.':'.(($ratio<1)?$tw:0).':'.(($ratio<1)?$th:0).':'?>';

_ALT = '<?php echo isset($fname)?$fname:""?>:';
_SIZE = '<?php echo isset($wh)?$wh:0?>';
_W = <?php echo (isset($w)&&$w!='')?$w:0?>;
_H = <?php echo (isset($h)&&$h!='')?$h:0?>;
_PICTURE_SHADOW = '<?php echo PICTURE_SHADOW?>';
var _CANVAS = '',  _CVPHOTO = '', _CVSTAMP = '', _CVCANCEL = false, _CVANGLE = 0, _POLAROID = '';

function o(id){return d.getElementById(id) ? d.getElementById(id) : null;};

if(parent.document.getElementById('upfiles')){
 //parent.document.getElementById('upfiles').style.overflow = 'hidden';
}

function _submit(){
 if(arguments[0]){
  var code = '<?php echo isset($output) ? $output : '';?>'; // MEDIA
 } else {
  if(o('IL').checked==true) _ALGN = ':left';
  if(o('IR').checked==true) _ALGN = ':right';
  if(o('IC').checked==true) _ALGN = ':center';
  if(o('IN').checked==true) _ALGN = ':none';
  if(o('shadow-on').checked==true) _SDW = ':1';
  if(o('shadow-off').checked==true) _SDW = ':0';
  if(o('bordered').checked==true) _BD = ':1:';
  if(o('borderless').checked==true) _BD = ':0:';
  _ALT = o('ALT').value.replace(',','&#44;').replace('|','&#1240;').replace('"','&quot;');
  _DESC = o('img-desc').value.replace('|','&#1240;').replace(',','&#44;').replace('"','&quot;');
  if(o('CPP').checked==true) _POLAROID = ':1';
  if(o('CPN').checked==true) _POLAROID = ':0';
  if(o('cv-photo').checked==true) _CVPHOTO = ' class="photo-effect';
  if(o('cv-stamp').checked==true) _CVSTAMP = ' class="photo-effect stamp-frame';
  if(o('cv-cancel').checked==true) _CVCANCEL = true;
  _CVANGLE = isNaN(parseInt(o('cv-angle').value)) ? _CVANGLE : parseInt(o('cv-angle').value);
  if(!_CVCANCEL){
   if(_CVPHOTO != '') _CANVAS = _CVPHOTO + (_CVANGLE ? ' photo-angle'+_CVANGLE+'" ' : '" ');
   if(_CVSTAMP != '') _CANVAS = _CVSTAMP + (_CVANGLE ? ' photo-angle'+_CVANGLE+'" ' : '" ');
  }
  // IMAGE FORMAT
  // [w:h:_w:_h:alt:align:shadow:border:desc:/]
  var code = '<img '+_FILE+' alt="'+_SIZEINFO+_ALT+_ALGN+_SDW+_BD+_DESC+_POLAROID+':"'+_CANVAS+'/>';
 }
 parent.insertFile(code);
 parent.document.getElementById('upfiles').src = 'about:blank';
 parent.document.getElementById('upfiles').style.display = 'none';
}

if(isSelected){
 parent.document.getElementById('upfiles').style.width = '520px';
 parent.document.getElementById('upfiles').firstChild.style.width = '100%';
 var height = (_H<280?parseInt(_H)+580:850) + 'px';
 parent.document.getElementById('upfiles').style.height = height;
 parent.document.getElementById('upfiles').firstChild.style.height = '98%'; 
} else {
 parent.document.getElementById('upfiles').style.height = '380px';
 parent.document.getElementById('upfiles').firstChild.style.height = '100%';
}
function setImage(tid, uid){
 if(uid=="" && o("#UID")) uid = o("#UID");
 self.location.href = "insertImage.php?TID="+tid+"&UID="+uid;
}
/*]]>*/</script>
</head>
<body id="upload-body">
<div id="wrapper">
<h1>InsertImageManager</h1>
<?php

if(!isset($selected)){
 $body = '
<ul class="p2em">
 <li>アップロードの新しい順にエントリー記事で使われていない画像を表示しています。</li>
 <li>挿入したい画像をクリックして，設定をして下さい。</li>
</ul>
 ';
 $body .= '<div id="ThumbView">';
 $body .= '<table cellspacing="0" cellpadding="0" style="width:100%;height:100%;"><tr>';

 foreach ($images_cache_unlinked as $i => $info){
  $split = explode("|", $info); // IMG: 9, 12
  if($split[0] == $UID || strstr($split[0], $UID)) continue;
  $len = sizeof($split);
  $title = ' title="ファイル名: '.$split[2].'&#13;&#10;ファイルサイズ: '.$split[5].'KB&#13;&#10;大きさ: '.$split[3].' x '.$split[4].'&#13;&#10;アップ日付: '.date('Y-m-d', $split[1]).'"';
  
  if(isset($split[10]) && $split[10]=='BMP'){ # Bitmap file;
   $img = '<img class="photo" src="'.IMG_DIR.$split[0].'_'.$split[2].'" width="'.$split[8].'" height="'.$split[9].'" alt=""'.$title.' />';
  } else {
   if($len==9){ // small enough
   $img = '<img class="photo" src="'.IMG_DIR.$split[0].'_'.$split[2].'" width="'.$split[3].'" height="'.$split[4].'" alt=""'.$title.' />';
   } else {
   $img = '<img class="photo" src="'.IMG_DIR.THUMB1.$split[0].'_'.$split[2].'" width="'.$split[8].'" height="'.$split[9].'" alt=""'.$title.' />';
   }
  }
  
  $body .= '
  <td><a href="#" onclick=\'setImage("'.$split[0].'","'.$UID.'");return false;\'>
  '.$img.'
  </a></td>
  '.NL;
 } # foreach
 $body .= '</tr></table>'.NL.'</div>'.NL;
 echo $body;
} else { // selected
 if($len > 7){ // IMG
 $shadow_on = (PICTURE_SHADOW==1) ? ' checked="checked"' : '';
 $shadow_off = (PICTURE_SHADOW!=1) ? ' checked="checked"' : '';
 $alt = explode('.', $name);
 if(strstr($alt[0], 'NONALNUM-')) $alt[0] = url_decode(str_replace('NONALNUM-', '', $alt[0])); // 英数字以外のファイル名
 echo '
 選択された画像です(大きいものは縮小表示されています)。<br />
 属性を適当に設定して<span style="border-bottom: 1px solid #333;">画像をクリック</span>して下さい。
 </p>
 <p><a href="#upload-body" onclick="_submit();return false;">'.$output.'</a></p>
 <p>実際の大きさは '.$w.'×'.$h.' ピクセル('.$fs.' KB) です。</p>
 <form>
 <fieldset>
 <legend>代替テキスト(ALT属性)</legend>
  <input type="text" id="ALT" value="'.$alt[0].'" size="20" />
 </fieldset>
 <fieldset>
 <legend>画像の配置(フロート属性)</legend>
  <input type="radio" name="align" id="IL" /><label for="IL" title="文字は右に回りこみます">左寄せ</label>
  <input type="radio" name="align" id="IR" checked="checked" /><label for="IR" title="文字は左に回りこみます">右寄せ</label>
  <input type="radio" name="align" id="IC" /><label for="IC" title="画像が中央に表示されます">センタリング</label>
  <input type="radio" name="align" id="IN" /><label for="IN" title="文字は画像の上か下に表示されます">指定しない</label>
 </fieldset>
 <fieldset>
 <legend>写真の影・ボーダー指定</legend>
   <input type="radio" name="shadow" id="shadow-on"'.$shadow_on.' /><label for="shadow-on">影あり</label>
   <input type="radio" name="shadow" id="shadow-off"'.$shadow_off.' /><label for="shadow-off">影なし</label>　　
   <input type="radio" name="border" id="bordered"'.(PICTURE_BORDER?' checked="checked"':'').' /><label for="bordered">白枠あり</label>
   <input type="radio" name="border" id="borderless"'.(!PICTURE_BORDER?' checked="checked"':'').' /><label for="borderless">白枠なし</label>
 </fieldset>
 <fieldset>
  <legend>画像に対する説明（キャプション）とか（空白以外のときは画像の下に反映されます)</legend>
   <input type="text" name="img-desc" id="img-desc" size="60" style="width:95%;" />
   <p style="text-align: center;margin-top: 0;"><input type="radio" name="capalign" id="CPP"'.(PICTURE_POLAROID?' checked="checked"':'').' /><label for="CPP" title="">ポラロイド風(シャドウ・ボーダー有効時のみ)<img src="Images/help.png" title="キャプションは画像ボーダー内に表示されます" alt="" /></label>
   <input type="radio" name="capalign" id="CPN"'.((!PICTURE_POLAROID || !PICTURE_BORDER)?' checked="checked"':'').' /><label for="CPN">ノーマル<img src="Images/help.png" title="キャプションは画像の下、ボーダー外側に表示されます" alt="" /></label></p>
 </fieldset>
 <fieldset>
  <legend>お洒落な演出（オプション）</legend>
   <input type="radio" name="canvas" id="cv-photo" /><label for="cv-photo">写真風</label>　あるいは
   <input type="radio" name="canvas" id="cv-stamp" /><label for="cv-stamp">切手風</label>　
   <input type="radio" name="canvas" id="cv-cancel" /><label for="cv-cancel" title="効果を取り消します">キャンセル</label><br />
   &nbsp;&nbsp;傾きの角度(-360°～360°: -5から5を推奨):
   <input type="text" name="cv-angle" id="cv-angle" size="3" value="3" />度
  </fieldset>
 </form>
 ';
 } else { // MEDIA
 echo '<p>メディアファイル:<strong>'.$name.'　('.$fs.'KB)</strong> を選択しました。<br />「OK」ボタンを押すとテキストエリアにタグが挿入されます。</p>'.NL;
 echo '<p><button onclick="_submit(1);return false;"> O K </button></p>';
 }
}

?>
<div class="close" title="このウィンドウを閉じる"
 onclick="parent.document.getElementById('upfiles').style.display='none';return false;"
>&nbsp;</div>
</div>
</body> 
</html>
